package cn.lyjuan.payment.third.base.common.enums.impl;

import cn.lyjuan.payment.third.base.common.enums.ICodeEnum;
import cn.lyjuan.payment.third.base.pay.enums.SimpleStatusEnum;

/**
 * 支付状态
 */
public enum PayStatusEnum implements ICodeEnum
{
    /**
     * 未支付
     */
    UN_PAY(0, SimpleStatusEnum.UNKNOWN)
    /**
     * 成功
     */
    , SUCC(1, SimpleStatusEnum.SUCC)
    /**
     * 失败
     */
    , FAIL(2, SimpleStatusEnum.FAIL);

    private Integer code;

    private SimpleStatusEnum simpleStatusEnum;

    @Override
    public Integer getCode()
    {
        return this.code;
    }

    public SimpleStatusEnum getSimpleStatusEnum()
    {
        return simpleStatusEnum;
    }

    PayStatusEnum(Integer code, SimpleStatusEnum simpleStatusEnum)
    {
        this.code = code;
        this.simpleStatusEnum = simpleStatusEnum;
    }

    public static PayStatusEnum from(SimpleStatusEnum simpleStatusEnum)
    {
        if (null == simpleStatusEnum)
            throw new NullPointerException("simple status enum cannot be null");

        PayStatusEnum[] es = PayStatusEnum.class.getEnumConstants();
        for (PayStatusEnum e : es)
        {
            if (e.simpleStatusEnum == simpleStatusEnum)
                return e;
        }

        throw new RuntimeException("unsupported simple status enum: " + simpleStatusEnum);
    }
}
